import { App } from "antd";
import { useConfig } from "./D8dConfigProvider.tsx";
import { useApiRequest } from "./useApiRequest.ts";
import { useQuery } from "@tanstack/react-query";
import type { TPageRequest } from "../global.ts";

type ConfigItem = {
  id: number;
  name: string;
  key: string;
  level: number;
  value: string;
  is_delete: number;
  created_at: string;
  updated_at: string;
  _index: number;
};

// 如果你需要定义一个数组类型来包含所有配置项，可以这样定义：
type ConfigList = ConfigItem[];

/**
 * 加载系统配置的钩子
 * @param options 配置选项
 * @param options.enabled 是否启用系统配置加载，默认为 true
 * @returns 系统配置是否加载完成
 */
export const useLoadSysConfig = ({ enabled = true }: { enabled?: boolean } = {}) => {
  const { message } = App.useApp();
  const { token, setSysConfig, apiUrl } = useConfig();
  const { requestWithToken } = useApiRequest();

  const initSysConfig = (sysConfig: ConfigList) => {
    sysConfig?.map((config) => {
      if (config.key === "two_level_select") {
        const configValue = config.value?.split("\n").map((line) => {
          // 每一行按冒号分割，得到父节点和子节点列表
          const [parent, childrenStr] = line.split(":");
          if (parent && childrenStr) {
            // 将子节点按逗号分割
            const children = childrenStr.split(",").map((child) => ({
              label: child.trim(), // 子节点名称
              value: child.trim(), // 这里假设value和label相同，可以根据需要修改
            }));
            // 添加到树结构中
            return {
              label: parent.trim(), // 父节点名称
              value: parent.trim(), // 这里假设value和label相同，可以根据需要修改
              children: children.length > 0 ? children : null, // 如果没有子节点，则设置为null
            };
          }
        });
        console.log(`系统配置_${config.name}`, configValue);

        // _F('store_func').callMethod('set', { key: `系统配置_${config.配置名称}`, value: 配置值 })
        setSysConfig((prevSysConfig: any) => ({
          ...prevSysConfig,
          [config.name]: configValue,
        }));
      } else if (config.key === "json") {
        try {
          const configValue = JSON.parse(config.value) as any;
          console.log(`系统配置_${config.name}`, configValue);
          setSysConfig((prevSysConfig: any) => ({
            ...prevSysConfig,
            [`${config.name}`]: configValue,
          }));
        } catch (error) {}
      } else {
        const configValue = config.value?.split("\n").map((item) => {
          let label = item;
          let value: string | number = item;
          if (item.includes(":")) {
            label = item?.split(":")[1];
            value = item?.split(":")[0];
            value = !isNaN(parseInt(value)) ? parseInt(value) : value;
          }
          return { label, value };
        });
        console.log(`系统配置_${config.name}`, configValue);

        // _F('store_func').callMethod('set', { key: `系统配置_${config.配置名称}`, value: 配置值 })
        setSysConfig((prevSysConfig: any) => ({
          ...prevSysConfig,
          [config.name]: configValue,
        }));
      }
    });
  };

  const query = useQuery({
    queryKey: ['sysConfig', token],
    queryFn: async () => {
      if (!token || !apiUrl.sysConfig) {
        return null;
      }

      const query: TPageRequest = {
        sort: ["updated_at:desc"],
        pagination: { page: 1, pageSize: 50 },
      };

      try {
        const result = await requestWithToken({
          url: apiUrl.sysConfig,
          method: "GET",
          data: query,
        });

        if (result?.code === 200 || result?.success) {
          initSysConfig(result.data);
          return result.data;
        } else {
          message.error(result.error);
          throw new Error(result.error);
        }
      } catch (error) {
        console.error(error);
        throw error;
      }
    },
    enabled: enabled && !!token && !!apiUrl.sysConfig,
  });

  return !query.isLoading && query.isSuccess;
};
